package com.github.zzay.common.core.annotation;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * @author zzay
 * @className MyRateLimit
 * @description Customized rate limiting
 * @create 2022/06/14 17:12
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Documented
public @interface MyRateLimit {

    /**
     * 不同接口对应不同流量控制
     *
     * @return key
     */
    String key() default "";

    /**
     * 若无法得到令牌，返回的提示语
     *
     * @return 无法得到令牌时返回的提示语
     */
    String msg() default "系统繁忙，请稍后再试！";

    /**
     * 时间单位，默认毫秒
     *
     * @return 时间单位
     */
    TimeUnit timeunit() default TimeUnit.MILLISECONDS;

    /**
     * 获取令牌的最大等待时间
     *
     * @return 获取令牌的最大等待时间
     */
    long timeout();

    /**
     * 最多的访问限制次数
     *
     * @return 最多的访问限制次数
     */
    double permitsPerSecond();

}
